The present invention relates in general to the field of computers and other data processing systems including hardware, software and processes. More specifically, it relates to error-tolerant and adaptive graphical user interface (GUI) test automation.
As software developers continue to introduce new and more sophisticated applications, there is a related increase in the complexity of the underlying program code. This complexity often extends to the application's graphical user interface (GUI), resulting in additional and sometimes unexpected challenges when developing meaningful software test procedures as part of a quality assurance (QA) process. Manual testing of an application's GUI can be labor intensive, error prone, and expensive, which has led the development of automated GUI testing solutions. While the goal of GUI test automation is to eliminate the need for manual testing, it is currently used as an adjunct to human testers.
Prior art approaches to automating GUI test procedures generally consist of either “record and playback” of manual GUI testing interactions or writing automated test procedures for each application. Record and playback approaches can be unreliable as it is likely that not all possible user gestures and GUI interactions will be captured and recorded for later playback. Developing custom-written automated GUI tests presents other challenges, as it often takes longer to develop the automated test than it does to test the GUI manually. Furthermore, GUI tests require debugging themselves and there is no guarantee that custom-written automated GUI tests will provide better coverage of all possible test cases. Similarly, the resulting test automation code can be susceptible to subsequent changes in the application being tested, which can contribute to unreliable testing and quality assurance results.
Other prior art approaches include the creation of test cases using a hierarchical model of a GUI's structure. Test cases generally serve as instructions or guides for human testers. Automated tests are intended to automatically navigate and test the functions of a software application without human assistance. There are also prior art approaches that automate the testing of GUI software by mapping the objects and buttons within a GUI window and then randomly clicking on buttons and entering text until the application fails. These approaches record the action that caused the application to fail, restart the application and then repeat the process, excluding any actions that previously caused the application to fail. However, these approaches are generally based on random actions and may not fully correlate to typical user behavior. In view of the foregoing, there is a need for improved test automation of a software application's GUI.